<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1.promise.all
        // 接收一个iterable(迭代)类型的值
        // 当函数全部执行完成并且全部成功 返回一个成功的promise实例 值为一个数组，数组中装着resolve函数的实参
        // 函数默认的状态为pending
        // 如果失败 不管函数是否全部执行完毕 都返回第一个失败的promise实例 值为错误信息
    //     const p1 = new Promise((resolve,reject)=>{
    //         throw new Error('获取A出错啦')
    //         console.log('开始获取A数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('A数据获取成功');
    //                 resolve('数据A')
    //             },2000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p2 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取B出错啦')
    //         console.log('开始获取B数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('B数据获取成功');
    //                 resolve('数据B')
    //             },1000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p3 = new Promise((resolve,reject)=>{
    //         throw new Error('获取C出错啦')
    //         console.log('开始C数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('C数据获取成功');
    //                 resolve('数据C')
    //             },2500)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })

    //    const result =  Promise.all([p1,p2,p3])
    //     console.log(result);



        // 2.promise.allSettled
        // 接收一个iterable类型的值做为参数
        // 返回值为一个数组
        // 数组中装着一个个对象，对象中装着对应的promise实例的结果 并且是按照书写顺序依次写入数组中
        // promise实例的状态永远为成功（fulfilled） 
    //     const p1 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取A出错啦')
    //         console.log('开始获取A数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('A数据获取成功');
    //                 resolve('数据A')
    //             },2000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p2 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取B出错啦')
    //         console.log('开始获取B数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('B数据获取成功');
    //                 resolve('数据B')
    //             },1000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p3 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取C出错啦')
    //         console.log('开始C数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('C数据获取成功');
    //                 resolve('数据C')
    //             },2500)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })

    //    const result =  Promise.allSettled([p1,p2,p3])
    //     console.log(result);



        // 3.promise.race
        // 默认返回一个状态为pending的promise实例 当第一个执行成功之后就返回一个成功或者失败的promise实例，值为resolve函数或者reject函数的实参
        // 返回那个最快执行的promise实例，不管成功还是失败，如果成功就返回和成功promise实例一致的实例，失败就返回失败一致的promise实例
    //     const p1 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取A出错啦')
    //         console.log('开始获取A数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('A数据获取成功');
    //                 resolve('数据A')
    //             },2000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p2 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取B出错啦')
    //         console.log('开始获取B数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('B数据获取成功');
    //                 resolve('数据B')
    //             },1000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p3 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取C出错啦')
    //         console.log('开始C数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('C数据获取成功');
    //                 resolve('数据C')
    //             },2500)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })

    //    const result =  Promise.race([p1,p2,p3])
    //     console.log(result);




        // 4.promise.any
        // 返回那个最快且成功执行的promise实例，如果都失败就返回一个 失败的promise实例 和 一个新的失败类型
         // 默认返回一个状态为pending的promise实例 当第一个执行成功之后就返回一个成功的promise实例，值为resolve函数的实参
    //     const p1 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取A出错啦')
    //         console.log('开始获取A数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('A数据获取成功');
    //                 resolve('数据A')
    //             },2000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p2 = new Promise((resolve,reject)=>{
    //         throw new Error('获取B出错啦')
    //         console.log('开始获取B数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('B数据获取成功');
    //                 resolve('数据B')
    //             },1000)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })
    //     const p3 = new Promise((resolve,reject)=>{
    //         // throw new Error('获取C出错啦')
    //         console.log('开始C数据');
    //         try{
    //             setTimeout(function(){
    //                 console.log('C数据获取成功');
    //                 resolve('数据C')
    //             },2500)
    //         }catch(e){
    //             reject(e.message)
    //         }
    //     })

    //    const result =  Promise.any([p1,p2,p3])
    //     console.log(result);





        // 5.promise.resolve  
        // 快速将一个事件包装成一个成功的promise实例
        const p1 = Promise.resolve(1)
        console.log(p1);


        // 6.promise.reject
        // 快速将一个事件包装成一个失败的promise实例
        const p2 = Promise.reject(2)
        console.log(p2);

    </script>
</body>
</html>